﻿using System.Diagnostics;

namespace Sage.WindowsProcess.Configuration
{
    /// <summary>
    /// 外部进程配置
    /// </summary>
    public class ProcessConfig
    {
        /// <summary>
        /// 进程唯一标识符
        /// </summary>
        public required string Key { get; set; }

        /// <summary>
        /// 可执行文件的完整路径
        /// </summary>
        public required string ExecutablePath { get; set; }

        /// <summary>
        /// 命令行参数
        /// </summary>
        public string? Arguments { get; set; }

        /// <summary>
        /// 工作目录（可选，默认为可执行文件所在目录）
        /// </summary>
        public string? WorkingDirectory { get; set; }

        /// <summary>
        /// 是否自动重启
        /// </summary>
        public bool AutoRestart { get; set; }

        /// <summary>
        /// 是否启用监控
        /// </summary>
        public bool EnableMonitoring { get; set; }

        /// <summary>
        /// 监控间隔（毫秒）
        /// </summary>
        public int MonitoringIntervalMs { get; set; } = 5000;

        /// <summary>
        /// 重启延迟（毫秒）
        /// </summary>
        public int RestartDelayMs { get; set; } = 2000;

        /// <summary>
        /// 最大重启尝试次数（0表示无限）
        /// </summary>
        public int MaxRestartAttempts { get; set; } = 3;

        /// <summary>
        /// 是否重定向标准输出和错误流。
        /// 如果为true(默认)，输出将被捕获到程序中；
        /// 如果为false，输出将直接显示在控制台窗口中(当CreateNoWindow=false时)。
        /// </summary>
        public bool RedirectOutput { get; set; } = true;

        /// <summary>
        /// 是否创建新窗口。对于控制台应用程序，设置为false会显示控制台窗口；
        /// 对于有自己UI的应用程序，此设置通常不影响其窗口显示。
        /// </summary>
        public bool CreateNoWindow { get; set; } = true;

        /// <summary>
        /// 进程优先级。控制进程的CPU调度优先级。
        /// 默认为Normal（正常优先级）。
        /// </summary>
        public ProcessPriorityClass ProcessPriority { get; set; } = ProcessPriorityClass.Normal;
    }
}
